package com.bestcem.xm.qdes.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.component.mybatis.service.IXmService;
import com.bestcem.xm.component.security.dto.TokenDTO;
import com.bestcem.xm.qdes.controller.param.*;
import com.bestcem.xm.qdes.controller.vo.OnlyIdVo;
import com.bestcem.xm.qdes.controller.vo.QdesLibProjectVo;
import com.bestcem.xm.qdes.controller.vo.QdesLibprojectLabelListVo;
import com.bestcem.xm.qdes.controller.vo.QdesLibprojectUserVo;
import com.bestcem.xm.qdes.entity.QdesLibProject;
import com.bestcem.xm.qdes.entity.QdesProject;
import com.bestcem.xm.qdes.entity.QdesQstruct;

import java.io.IOException;
import java.util.List;

/**
 * @author guitao.lu
 * @version V1.0
 * @date 2022/8/1
 */
public interface QdesLibProjectService extends IXmService<QdesLibProject> {

    /**
     * 查询问卷库
     *
     * @param page  分页
     * @param param 参数
     * @return 数据
     */
    Page<QdesLibProjectVo> pageLibproject(Page<?> page, ProjectLibPageParam param);

    /**
     * 查询问卷库
     *
     * @param param 参数
     * @return 数据
     */
    List<QdesLibProjectVo> getAllIndustryProject(ProjectLibPageParam param);

    /**
     * 查询问卷库详情
     *
     * @param id 参数
     * @return 数据
     */
    QdesLibProjectVo getOneIndustryById(String id, String orgId);

    /**
     * 创建问卷库
     *
     * @param param 参数
     * @return 数据
     */
    OnlyIdVo createLibProject(ProjectLibCreateParam param) throws IOException;

    /**
     * 更新问卷库
     *
     * @param param    参数
     * @param id       id
     * @param tokenDTO token
     * @return 数据
     */
    OnlyIdVo updateLibProject(ProjectLibUpdateParam param, String id, TokenDTO tokenDTO);

    /**
     * 删除问卷库
     *
     * @param id       id
     * @param tokenDTO token
     */
    void deleteLibProject(String id, TokenDTO tokenDTO);

    /**
     * 复制问卷库
     *
     * @param param 参数
     * @return 数据
     */
    OnlyIdVo duplicateProjectLib(ProjectLibDuplicateParam param);

    /**
     * 获取问卷库创建人信息
     *
     * @param orgId orgId
     * @return 数据
     */
    List<QdesLibprojectUserVo> getProjectLibUser(String orgId);

    /**
     * 获取问卷库创建人信息
     *
     * @return 数据
     */
    QdesLibprojectLabelListVo getProjectLibLabel();

    /**
     * 引用模版库创建问卷
     *
     * @param id     id
     * @param userId userId
     * @param orgId  orgId
     * @return 项目
     */
    QdesProject useProjectTemp(String id, String userId, String orgId, JSONObject param) throws IOException;

    /**
     * 拷贝项目
     *
     * @param id    id
     * @param param param
     * @return 项目
     */
    QdesProject copyProject(String id, ProjectCreateParam param) throws IOException;

    /**
     * 获取可操作的项目列表
     *
     * @param permission
     * @param page
     * @param rowsPerPage
     * @param title
     * @param status
     * @param userId
     * @return
     */
    ServiceResult<?> getOperableProjectList(Integer permission, Integer page, Integer rowsPerPage, String title, Integer status, String userId);

    /**
     * 设置项目为置顶,取消项目置顶
     *
     * @param id
     * @param setTop
     * @param userId
     * @return
     */
    Integer projectTop(String id, Boolean setTop, String userId);

    String copyStruct(String sid, String newPid, String newTitle, boolean templetNotSetQstructtitle, Integer version) throws IOException;

    String genQstructUcss(String pid, QdesQstruct qstruct) throws IOException;

    String genQstructGjs(String pid, QdesQstruct qstruct) throws IOException;
}
